package com.zf.rpc.registry;

import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.zf.rpc.enumeration.RpcError;
import com.zf.rpc.exception.RpcException;
import com.zf.rpc.util.NacosUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetSocketAddress;
import java.util.List;

/**
 * @ProjectName: RPC-zhaofeng
 * @Package: com.zf.rpc.registry
 * @ClassName: NacosServiceRegistry
 * @Author: zf
 * @Description:Nacos服务注册中心
 *通过 NamingFactory 创建 NamingService 连接 Nacos（连接的时候没有找到修改用户名密码的方式……是不需要吗），
 * 连接的过程写在了静态代码块中，在类加载时自动连接。namingService 提供了两个很方便的接口，
 * registerInstance 和 getAllInstances 方法，前者可以直接向 Nacos 注册服务，
 * 后者可以获得提供某个服务的所有提供者的列表。所以接口的这两个方法只需要包装一下就好了。
 *
 *
 * 在 lookupService 方法中，通过 getAllInstance 获取到某个服务的所有提供者列表后，
 * 需要选择一个，这里就涉及了负载均衡策略，这里我们先选择第 0 个，后面某节会详细讲解负载均衡。
 *
 * @Date: 2021/5/12 15:59
 * @Version: 1.0
 */
public class NacosServiceRegistry implements ServiceRegistry{
    private static final Logger logger = LoggerFactory.getLogger(NacosServiceRegistry.class);


    @Override
    public void register(String serviceName, InetSocketAddress inetSocketAddress) {
        try {
            NacosUtil.registerService(serviceName, inetSocketAddress);
        } catch (NacosException e) {
            logger.error("注册服务时有错误发生:", e);
            throw new RpcException(RpcError.REGISTER_SERVICE_FAILED);
        }
    }


}
